package cn.sxw.ld.common.utils;

import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * @author: SXW
 * @since: 2025年02月23日 19:42
 * @desc:
 */
public class DateUtils {

    /**
     * yyyy-MM-dd
     */
    public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";

    /**
     * 计算上周开始时间和结束时间
     *
     * @return
     */
    public static Date[] getLastLastWeekRange() {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 前七天的开始日期（不包含今天）
        LocalDate startDate = today.minusDays(7);
        // 前七天的结束日期（不包含今天）
        LocalDate endDate = today.minusDays(1);

        // 将 LocalDate 转换为 Date
        Date start = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        Date end = Date.from(endDate.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());

        return new Date[]{start, end};
    }

    /**
     * 统计上个月
     *
     * @return
     */
    public static Date[] getLastMonthRange() {
        // 获取当前日期
        LocalDate today = LocalDate.now();
        // 前 30 天的开始日期（不包含今天）
        LocalDate startDate = today.minusDays(30);
        // 前 30 天的结束日期（不包含今天）
        LocalDate endDate = today.minusDays(1);

        // 将 LocalDate 转换为 Date
        Date start = Date.from(startDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        Date end = Date.from(endDate.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant());

        return new Date[]{start, end};
    }

    /**
     * 格式化日期
     *
     * @param date
     * @param pattern
     * @return
     */
    public static String formatDate(LocalDateTime dateTime, String pattern) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
        return dateTime.format(formatter);
    }

    /**
     * 按 yyyy-MM-dd 格式日期
     *
     * @param currentTimeMillis
     * @return
     */
    public static String formatDate(long currentTimeMillis) {
        // 将毫秒数转换为 Instant
        Instant instant = Instant.ofEpochMilli(currentTimeMillis);

        // 将 Instant 转换为 LocalDate
        LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();

        // 定义日期格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YEAR_MONTH_DAY);

        // 格式化日期
        return localDate.format(formatter);
    }
}
